//package com.example.servicearea.demo.frame;
//
//import com.example.servicearea.lib.NetSDKLib;
//import com.example.servicearea.lib.NetSDKLib.LLong;
//import com.example.servicearea.lib.NetSDKLib.NET_DEVICEINFO_Ex;
//import com.example.servicearea.lib.ToolKits;
//import com.example.servicearea.utils.StringUtil;
//import com.sun.jna.Pointer;
//
//import java.io.File;
//import java.sql.Connection;
//import java.sql.DriverManager;
//import java.sql.Statement;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.Map;
//
//public class RealplayEx {
//    private static String url = "jdbc:mysql://localhost:3306/service?useSSL=false&serverTimezone=UTC&characterEncoding=utf-8"; // 获取连接
//    private static String user = "root";
//    private static String password= "Root@123456!";
//	public static final NetSDKLib netSdk = NetSDKLib.NETSDK_INSTANCE;
//    private static int channel=0;
//    public static boolean hasini=false;
//    public static Object lock=new Object();
////    private static int channel=0;
//    public static Map<Integer, LLong> getM_hAttachMap() {
//        return m_hAttachMap;
//    }
//
//    // handle map
//    private static Map<Integer, NetSDKLib.LLong> m_hAttachMap = new HashMap<Integer, LLong>();
//
//
//
//    public void InitTest(){
//        synchronized(lock) {
//            if (hasini)
//                return;
//            System.out.println("initial***********");
//            // 初始化SDK库
//            netSdk.CLIENT_Init(DisConnectCallBack.getInstance(), null);
//
//            // 设置断线重连成功回调函数
//            netSdk.CLIENT_SetAutoReconnect(HaveReConnectCallBack.getInstance(), null);
//
//            //打开日志，可选
//            NetSDKLib.LOG_SET_PRINT_INFO setLog = new NetSDKLib.LOG_SET_PRINT_INFO();
//            String logPath = new File(".").getAbsoluteFile().getParent() + File.separator + "sdk_log" + File.separator + "sdk.log";
//            setLog.bSetFilePath = 1;
//            System.arraycopy(logPath.getBytes(), 0, setLog.szLogFilePath, 0, logPath.getBytes().length);
//            setLog.bSetPrintStrategy = 1;
//            setLog.nPrintStrategy = 0;
//            if (!netSdk.CLIENT_LogOpen(setLog)) {
//                System.err.println("Open SDK Log Failed!!!");
//            }
//            hasini=true;
//        }
//
//	}
//
//	public LLong Login(String m_strIp,int m_nPort,String m_strUser,String m_strPassword ){
//
////        if (m_strIp.endsWith("71")) {
////            return new LLong(0);
////        }
//        NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY pstInParam=
//                new NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY();
//
//        pstInParam.szIP= m_strIp.getBytes();
//        pstInParam.nPort= m_nPort;
//        pstInParam.szUserName= m_strUser.getBytes();
//        pstInParam.szPassword= m_strPassword.getBytes();
//        //出参
//        NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY pstOutParam=
//                new NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY();
//        LLong m_hLoginHandle =
//                netSdk.CLIENT_LoginWithHighLevelSecurity(
//                        pstInParam,  pstOutParam);
//        if(m_hLoginHandle.longValue() == 0) {
//            System.err.printf("Login Device[%s] Port[%d]Failed. %s\n", m_strIp, m_nPort,
//                    ToolKits.getErrorCodePrint());
//        } else {
//            System.out.println("Login Success ");
//        }
//        return m_hLoginHandle;
//	}
//
//	public void LoginOut(LLong m_hLoginHandle){
//		System.out.println("End Test");
//
//		if( m_hLoginHandle.longValue() != 0)
//		{
//			netSdk.CLIENT_Logout(m_hLoginHandle);
//		}
//		System.out.println("See You...");
//
//		netSdk.CLIENT_Cleanup();
//		System.exit(0);
//
//	}
//
//
//    public LLong attachVideoStatSummary(String Ip, Integer deviceId,LLong m_hLoginHandle,int channel) {
////        if (m_hAttachMap.containsKey(channel)) {
////            sleep(30000);
////        }
//        if (m_hLoginHandle.longValue() == 0) {
//            return new LLong(0);
//        }
////        ip = Ip;
////        deviceid = deviceId;
//        VideoStatSumCallback vs=new VideoStatSumCallback();
//        vs.setDeviceIp(Ip);
//        vs.setDeviceId(deviceId);
//        NetSDKLib.NET_IN_ATTACH_VIDEOSTAT_SUM videoStatIn = new
//                NetSDKLib.NET_IN_ATTACH_VIDEOSTAT_SUM();
//
//        videoStatIn.nChannel = channel;
//        System.out.println(videoStatIn.nChannel);
//        videoStatIn.cbVideoStatSum = vs;
//        NetSDKLib.NET_OUT_ATTACH_VIDEOSTAT_SUM videoStatOut = new
//                NetSDKLib.NET_OUT_ATTACH_VIDEOSTAT_SUM();
//        LLong videoStatHandle = netSdk.CLIENT_AttachVideoStatSummary(m_hLoginHandle,
//                videoStatIn, videoStatOut, 5000);
//        if( videoStatHandle.longValue() == 0 ) {
//            System.err.printf("Attach Failed!LastError = %x\n",
//                    netSdk.CLIENT_GetLastError());
//            return new LLong(0);
//        }
//        System.out.println(vs.getDeviceIp());
//        System.out.println(m_hLoginHandle);
//        System.out.println(videoStatHandle);
//        System.out.println(videoStatIn.cbVideoStatSum.hashCode());
//        System.out.println(videoStatIn.hashCode());
//        System.out.println(videoStatOut.hashCode());
//
//        return videoStatHandle;
//    }
//    /**
//     * 退订
//     */
//    public void detachVideoStatSummary(LLong videoStatHandle) {
//        if (videoStatHandle.longValue() != 0) {
//            netSdk.CLIENT_DetachVideoStatSummary(videoStatHandle);
//            videoStatHandle.setValue(0);
//        }
//    }
//
//	 public LLong RunTest(String Ip,Integer deviceId,LLong m_hLoginHandle,int channel){
//         return attachVideoStatSummary(Ip,deviceId,m_hLoginHandle,channel);
//
//
//		}
//	 /**
//     * 设备断线回调
//     */
//      public static class DisConnectCallBack implements NetSDKLib.fDisConnect {
//
//        private DisConnectCallBack() {
//        }
//
//        private static class CallBackHolder {
//            private static DisConnectCallBack instance = new DisConnectCallBack();
//        }
//
//        public static DisConnectCallBack getInstance() {
//            return CallBackHolder.instance;
//        }
//
//        public void invoke(NetSDKLib.LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) {
//            System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
//        }
//    }
//
//    /**
//     * 设备重连回调
//     */
//     public static class HaveReConnectCallBack implements NetSDKLib.fHaveReConnect {
//        private HaveReConnectCallBack() {
//        }
//
//        private static class CallBackHolder {
//            private static HaveReConnectCallBack instance = new HaveReConnectCallBack();
//        }
//
//        public static HaveReConnectCallBack getInstance() {
//            return CallBackHolder.instance;
//        }
//
//        public void invoke(NetSDKLib.LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
//            System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);
//
//        }
//    }
//
//
//    public  class VideoStatSumCallback implements NetSDKLib.fVideoStatSumCallBack{
//        private  String DeviceIp;
//        private  Integer DeviceId;
//
//        private  Date lastTime = null;
//        private  Date currentTime = null;
//        private  Integer lastEnterNum = null;
//        private  Integer lastExitNum = null;
//        private  Integer currentEnterNum = null;
//        private  Integer currentExitNum = null;
//
//        public  String getDeviceIp() {
//            return DeviceIp;
//        }
//        public  void setDeviceIp(String deviceIp) {
//            DeviceIp = deviceIp;
//        }
//        public  Integer getDeviceId() {
//            return DeviceId;
//        }
//        public  void setDeviceId(Integer deviceId) {
//            DeviceId = deviceId;
//        }
//
//
////        VideoStatSumCallback instance = new VideoStatSumCallback();
//        private VideoStatSumCallback() {}
////        public  VideoStatSumCallback getInstance() {
////        return instance;
////    }
//
//
//
//        public void invoke(LLong lAttachHandle, NetSDKLib.NET_VIDEOSTAT_SUMMARY stVideoState, int
//            dwBufLen, Pointer dwUser){
//            System.out.printf("Channel[%d] GetTime[%s] RuleName[%s]\n" +
//                            "People In Information[Total[%d] Hour[%d] Today[%d]]\n" +
//                            "People Out Information[Total[%d] Hour[%d] Today[%d]]\n",
//                    stVideoState.nChannelID , stVideoState.stuTime.toStringTime() ,
//                    new String(stVideoState.szRuleName).trim(),
//                    stVideoState.stuEnteredSubtotal.nToday ,
//                    stVideoState.stuEnteredSubtotal.nHour ,
//                    stVideoState.stuEnteredSubtotal.nTotal ,
//                    stVideoState.stuExitedSubtotal.nToday ,
//                    stVideoState.stuExitedSubtotal.nHour ,
//                    stVideoState.stuExitedSubtotal.nTotal
//            );
//            System.out.println("-------------------");
//            System.out.println(DeviceIp);
//            String time = StringUtil.clearStr(stVideoState.stuTime.toStringTime());
//            Date date = stVideoState.stuTime.toDate();
//
//            if (lastTime == null) {
//                lastTime = date;
//                lastEnterNum = stVideoState.stuEnteredSubtotal.nTotal;
//                lastExitNum = stVideoState.stuExitedSubtotal.nTotal;
//            } else {
//                currentEnterNum = stVideoState.stuEnteredSubtotal.nTotal;
//                currentExitNum = stVideoState.stuExitedSubtotal.nTotal;
//                currentTime = date;
//                //比较一下时间
//                long diff, min;
//                diff = min = 0;
//                diff = currentTime.getTime() - lastTime.getTime();
//                min = diff / 1000 ;
//                System.out.println(min);
//                if (min >= 5 * 60) {
//                    int EnterNum = currentEnterNum - lastEnterNum;
//                    System.out.println(EnterNum);
//                    int ExitNum = currentExitNum - lastExitNum;
//                    System.out.println(ExitNum);
//                    try {
//                        Class.forName("com.mysql.cj.jdbc.Driver");             // 加载驱动类
//                        Connection conn = DriverManager.getConnection(url, user, password);
//                        String sql = "insert into peopleflow(device_ip,send_time,device_id,enter_num,exit_num) " +
//                                "values('" + getDeviceIp() + "','" + time + "','" + getDeviceId() + "','" + EnterNum + "','" + ExitNum + "')";  //******
//                        // 根据页面的数据，生成插入学生的sql语句
//
//                        Statement stmt = conn.createStatement();// 创建statement
//                        int count = stmt.executeUpdate(sql);// 执行sql
//                        String message = "插入失败";
//                        if (count > 0) {
//                            message = "插入成功";
//                        }
//                        //JOptionPane.showMessageDialog(null, message);  //消息对话框
//                        conn.close();
//                        stmt.close();
//                    } catch (Exception e2) {
//                        e2.printStackTrace();
//                    };
//                    lastTime = currentTime;
//                    lastEnterNum = currentEnterNum;
//                    lastExitNum = currentExitNum;
//                }
//            }
//            System.out.println("-------------------");
//        }
//
//    }
//
//
//    public  void loginDevice(String Ip ,String Username, String Password,Integer deviceId){
//        MyThread myThread=new MyThread(Ip, Username, Password,deviceId);
//        myThread.start();
//    }
//
//
//    public  class MyThread extends Thread{
//        private String IP;
//        private String user;
//        private String psw;
//        private Integer deviceId;
//        // 登陆句柄
//        private LLong m_hLoginHandle = new LLong(0);
//        private LLong videoStatHandle=new LLong(0);
//
//        public MyThread(String IP,String user,String psw,Integer deviceId){
//            this.IP = IP;
//            this.user = user;
//            this.psw = psw;
//            this.deviceId = deviceId;
//        }
//
//        @Override
//        public void run(){
//            if(IP.endsWith("71"))
//                return;
//            RealplayEx XM = new RealplayEx();
//            XM.InitTest();
////            try {
////                if(IP.endsWith("71"))
////                    sleep(30000);
////            } catch (InterruptedException e) {
////                e.printStackTrace();
////            }
//            m_hLoginHandle=XM.Login(IP, 37777, user, psw);
//
//            System.out.println(IP + user + psw);
//            videoStatHandle=XM.RunTest(IP,deviceId,m_hLoginHandle,0);
//
//
//            while (true) {
//                //这里加入控制台输入控制，是为了保持连接状态，当输入Y表示布防结束
//                try {
//                    sleep(1000);
//                    //System.out.println(m_hLoginHandle.longValue()+"||"+videoStatHandle.longValue());
//
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                    break;
//                }
//            }
//            XM.LoginOut(m_hLoginHandle);
//        }
//    }
//
//
//}
//
